{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Vendor:  Continuum Analytics, Inc.\n",
      "Package: mkl\n",
      "Message: trial mode expires in 30 days\n"
     ]
    }
   ],
   "source": [
    "from __future__ import print_function, division\n",
    "from nilmtk import DataSet, HDFDataStore\n",
    "from os.path import join\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import rcParams\n",
    "import math\n",
    "from nilmtk.metrics import f1_score # metrics is actually different; need to look at this\n",
    "from nilmtk.metrics import rms_error_power\n",
    "from nilmtk.metrics import mean_normalized_error_power\n",
    "from nilmtk.disaggregate import fhmm_exact # OK, only different in what is printed to screen (and this is diagonal covariance matrix)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "building_number = 1\n",
    "ds = DataSet(\"/data/REDD/redd.h5\")\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train = DataSet(\"/data/REDD/redd.h5\")\n",
    "test = DataSet(\"/data/REDD/redd.h5\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "elec = train.buildings[building_number].elec"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Loading data for meter ElecMeterID(instance=2, building=1, dataset='REDD')     \n",
      "Done loading data all meters for this chunk.\n"
     ]
    }
   ],
   "source": [
    "mains = elec.mains()\n",
    "df_all = mains.power_series_all_data() #df_all has a bunch of NaNs\n",
    "df_all_noNan = df_all.dropna()\n",
    "a = df_all_noNan.keys()\n",
    "middleTime = a[int(math.floor(a.size/2))]\n",
    "middleTimeStr = \"%d-%02d-%02d %02d:%02d:%02d\" % (middleTime.year, middleTime.month, middleTime.day, middleTime.hour, middleTime.minute, middleTime.second)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'2011-04-27 19:08:15'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "middleTimeStr"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "15/16 MeterGroup(meters=\n",
      "  ElecMeter(instance=3, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])\n",
      "  ElecMeter(instance=4, building=1, dataset='REDD', appliances=[Appliance(type='electric oven', instance=1)])\n",
      "16/16 MeterGroup(meters=\n",
      "  ElecMeter(instance=10, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])\n",
      "  ElecMeter(instance=20, building=1, dataset='REDD', appliances=[Appliance(type='washer dryer', instance=1)])\n",
      "Calculating total_energy for ElecMeterID(instance=20, building=1, dataset='REDD') ...   "
     ]
    }
   ],
   "source": [
    "train.set_window(end=middleTimeStr)\n",
    "test.set_window(start=middleTimeStr)\n",
    "\n",
    "train_elec = train.buildings[building_number].elec\n",
    "test_elec = test.buildings[building_number].elec\n",
    "\n",
    "top_train_elec = train_elec.submeters().select_top_k(k=5)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Training model for submeter 'ElecMeter(instance=5, building=1, dataset='REDD', appliances=[Appliance(type='fridge', instance=1)])'\n",
      "Training model for submeter 'ElecMeter(instance=11, building=1, dataset='REDD', appliances=[Appliance(type='microwave', instance=1)])'\n",
      "Training model for submeter 'ElecMeter(instance=8, building=1, dataset='REDD', appliances=[Appliance(type='sockets', instance=2)])'\n",
      "Training model for submeter 'ElecMeter(instance=9, building=1, dataset='REDD', appliances=[Appliance(type='light', instance=1)])'\n",
      "Training model for submeter 'ElecMeter(instance=6, building=1, dataset='REDD', appliances=[Appliance(type='dish washer', instance=1)])'\n",
      "Loading data for meter ElecMeterID(instance=2, building=1, dataset='REDD')     \n",
      "Done loading data all meters for this chunk.\n"
     ]
    }
   ],
   "source": [
    "fhmm = fhmm_exact.FHMM() #mk change this later  to default\n",
    "fhmm.train(top_train_elec, sample_period=60, resample=True)\n",
    "output = HDFDataStore(\"/data/REDD/449.h5\", 'w')\n",
    "fhmm.disaggregate(test_elec.mains(), output, sample_period=60, resample=True)\n",
    "output.close()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1154dfa90>"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\ni52hNDAzSZIGl1lt5ek7SVIzDCVJUjMMJUlSMwwlSVIzDCVJUjPGHkpJ3prk20lWJ1mVZL8htz8i\nyQlDtH9tkm2Hr1SSNN/GOiU8yZOBQ4BlVXVrkp2Auw+5m2Hnah8DfBS4ecjtJEnzbNwjpV2An1bV\nrQBV9fOq+nGSZyT5VpI1ST6cZGuAJPsmOTfJxUnOT7I9fZPhkxyS5Lwk90ny7G75oiQfT3KPJK8B\nHgB8PclZSe6W5N+SrO2e67Xj6ARJUk+qxvel0CT3AP4L2A74KvAx4ELgu8DTq+qKJCcD3wLeD3wH\nOKyqLuoC6WbgJcATga8BrwMOBbYCPgUcXFU3J3kTsHVV/W2Sq4B9qurnSfYBjq+qZ3f13Kuqbpym\nzvLLs5I0jN54oaqG+hbtWE/fVdW6LhgOBJ5GL5SOB66qqiu6ZicDfwacBfy4qi7qtv0lQJIAT6cX\nTM+qql8meS7wKOC83sNsDZw3TQnfBx6S5L3AF4CvbLzayb7lie4mSVpveXebvbFfZqiq7gDOBs5O\nspZeAPWbKWWLXrg8GNgLuKhbf2ZVvWiG574hyeOAg4FXAocBR07fenKGMiRpSzfB+v+wv21Wexjr\nZ0pJHp5kz75Vy+gFzIOSPLRb91J60Xs58FtJnthte88kS+iF1jXAC4B/T/Io4ALggKl9dJ8nTT3P\nTcAO3fr7AEur6nTgr4EnzNuLlSTNaNwjpe2BE5LsCNwGfA94OXAq8IkkS+l9xvSBbnbe4V37bYFf\nAc+iN1Kqqro8yYuBTwDPBY4ATk0yNZvvrd3+PwSckeRH9D6DOinJVDgfO++vWJK0UWOd6LBQONFB\nkoY1u4kO454SLknSbxhKkqRmGEqSpGYYSpKkZhhKkqRmGEqSpGaM+3tKC8hQsxolSbNgKA1o2Ln2\nkrSl633HczievpMkNcNQkiQ1w1CSJDXDUJIkNcNQkiQ1w1CSJDXDUJIkNcNQkiQ1w1CSJDXDUJIk\nNcNQkiQ1w1CSJDXDUJIkNcNQkiQ1w1CSJDXDUJIkNcNQkiQ1w1CSJDXDUJIkNcNQkiQ1w1CSJDVj\n6bgLWCiS1LhrmFJVGXcNkjQfDKWBtZJJ5pGkxcvTd5KkZhhKkqRmGEqSpGYYSpKkZswYSkluT7Iq\nybeTXJzkL5Kke2yfJP+8iW0nknxuLgueyTieU5I0NwaZfferqloGkGRn4BRgB2Cyqi4CLprH+kYu\nyZKqun3cdUjSlmio03dVdT3wcuBouPOoJMlB3YhqVZJvJdm+22z7JJ9I8p0k/7HhPpPcL8nKbnnv\nJHckeWB3/4ok2yQ5NMn53X7PTHK/2TxnN7JbnmRlkjOS7NKtX57kPUm+CbxmmD6RJM2dob+nVFVX\nJVnSjZr6vR54dVV9I8l2wK+79cuARwE/Bs5NckBVndu3v+u64LkncCDwTeCpSc4FrquqW5KsqKr9\nAZL8KfBG4A3DPCdwIXACcGhV/SzJ4cDbgSPpfQlpq6rad9j+kCTNnbn88uy5wHuS/CdwelX9qPvo\n6cKquhYgycXAHl3bfucBB9ALpeOBg+l9S3RF9/huST4O7AJsDVw5i+e8EXg08NWuzRLg2r4aPrb5\nXSBJ2hxDh1KShwC3V9X13cEdgKp6Z5LPA4fQG538TvfQr/s2v30jz3kO8FRgd+AzwLH0Ri+f7x4/\nAXh3VX0+yUHA5Cyf85KqespGXtq6Tb7w3lN2JrqbJGlKkgk28+A4VCh1p+w+QC8kNnzsoVV1CXBJ\nkn2BveiNTgaxAngHsLyqKsnPgefQCyfoTayYGtUcMYvnLOByYOck+1fV+Um2AvasqksHK3FywJci\nSVumqloOLJ+6n+S4YfcxyESHbaemhANnAmdU1dumamD9ReGOSbI2yWrg/4Av9bW5U90bPkFVXdMt\nntP9uwL4RVVNBcwk8IluQsT1s3hOqupW4AXAO7tTequAJ8/46iVJI5OqVi402q7eFcJb6ad4lXBJ\nC0KSGvZ45RUdJEnNMJQkSc0wlCRJzTCUJEnNMJQkSc0wlCRJzTCUJEnNmMtr3y1yfjVIkuaboTQg\nv7AqSfPP03eSpGYYSpKkZhhKkqRmGEqSpGYYSpKkZhhKkqRmGEqSpGYYSpKkZhhKkqRmGEqSpGYY\nSpKkZhhKkqRmGEqSpGYYSpKkZhhKkqRmGEqSpGYYSpKkZhhKkqRmGEqSpGYYSpKkZiwddwELRZIa\ndw3SQlNVGXcNWlgMpYGZSdJwzCMNz9N3kqRmGEqSpGYYSpKkZhhKkqRmGEqSpGY0HUpJbk+yqu+2\n+zRtvpBkh2nWTyZ5/WgqlSTNhdanhP+qqpZN90CSAFTVIRvZ1jnckrTAND1S2lCSPZJcnuRkYC2w\nW5Krk+zUPf7W7vEVwF592+2bZE032npXkrXd+iXd/QuTrE7y8rG8MEkS0H4obdt36u5T9EY/DwPe\nV1WPqar/7taRZB/gcGBv4DnAvqwfLZ0EHNWNum7rW38kcENV7QfsBxyVZI+RvDJJ0l20fvru5v7T\nd11gXFNVF27QLsCBwOlVdQtwS5LPdtvcC9i+qi7o2p4CPLdbfjbw2CQv6O7vQC/0rr5rKZN9yxPd\nTZI0JckEm3lwbD2UprNuI+uLO1/XZGPXONlw/dFVdebMTzs5cxNJ2oJV1XJg+dT9JMcNu4/WT98N\nqoBzgOcl2SbJPelGQ1V1I3BTkv26ti/s2+7LwKuTLAVI8vAk242wbklSn9ZHStPNoNtwXQFU1aok\nHwNWA9cB/af4jgROTHIHcDZwY7f+X4E9gG91s/muA54/Z9VLkoaSqsU/czrJPapqXbd8LHD/qnrd\nENuXM8ylYcWfrtjCJalh3wOtj5TmyiFJ3kzv9V4NHDHWaiRJ09oiRkqby5GSNBuOlLZ0sxkpLZaJ\nDpKkRcBQkiQ1w1CSJDXDUJIkNcNQkiQ1Y0uZEj4HnEQkSfPNUBqQU1slaf55+k6S1AxDSZLUDENJ\nktQMQ0mS1AxDSZLUDENJQ+l+7ljYF/3si/Xsi81jKGlYE+MuoCET4y6gIRPjLqAhE+MuYCEzlCRJ\nzTCUJEnN8Ef+BtD7kT9J0rCGvRqOoSRJaoan7yRJzTCUJEnNMJQ6SQ5OclmS7yV500bavLd7fHWS\nZaOucVRm6oskL+76YE2Sc5M8bhx1jsIg74uu3b5JbkvyB6Osb5QG/BuZSLIqybeTLB9xiSMzwN/I\nfZOckeTiri+OGEOZ8y7JR5L8JMnaTbQZ7rhZVVv8DVgCXAHsAWwFXAw8coM2zwG+2C0/CTh/3HWP\nsS+eDNyrWz54S+6LvnZfAz4P/OG46x7j+2JH4BLggd39+4677jH2xSRw/FQ/AD8Dlo679nnoiwOB\nZcDajTw+9HHTkVLPfsAVVXV1Vd0KnAb8/gZtfg84GaCqLgB2THL/0ZY5EjP2RVV9o6pu7O5eADxw\nxDWOyiDvC4A/Bz4JXD/K4kZskL54EfCpqvohQFX9dMQ1jsogffFjYIdueQfgZ1V12whrHImqWgH8\nYhNNhj5uGko9uwI/6Lv/w27dTG0W48F4kL7odyTwxXmtaHxm7Isku9I7IL2/W7VYp7MO8r7YE9gp\nydeTrEzy0pFVN1qD9MWJwKOTXAusBo4ZUW2tGfq46S/P9gx6INlwvv1iPAAN/JqSPA14GXDA/JUz\nVoP0xT8Bx1ZVJQl3fY8sFoP0xVbAE4BnANsB30hyflV9b14rG71B+uItwMVVNZHkocCZSfauqpvm\nubYWDXXcNJR6fgTs1nd/N3qJvqk2D+zWLTaD9AXd5IYTgYOralPD94VskL7YBzitl0fcF/jdJLdW\n1WdHU+LIDNIXPwB+WlU3AzcnOQfYG1hsoTRIXzwFeDtAVX0/yVXAXsDKkVTYjqGPm56+61kJ7Jlk\njyRbA4cDGx5UPgv8MUCS/YEbquonoy1zJGbsiyS7A6cDL6mqK8ZQ46jM2BdV9ZCqenBVPZje50qv\nWoSBBIP9jXwG+O0kS5JsR++D7UtHXOcoDNIXlwHPBOg+Q9kLuHKkVbZh6OOmIyWgqm5LcjTwZXoz\naz5cVd9J8oru8Q9W1ReTPCfJFcA64E/GWPK8GaQvgL8B7g28vxsh3FpV+42r5vkyYF9sEQb8G7ks\nyRnAGuAO4MSqWnShNOD74h3ASUlW0/vP/xur6udjK3qeJDkVOAi4b5IfAMfRO4076+OmlxmSJDXD\n03eSpGYYSpKkZhhKkqRmGEqSpGYYSpKkZhhKkqRmGEqSpGYYSpKkZvw/UjTMUG+D3VUAAAAASUVO\nRK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x1154e0e50>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "disag = DataSet(\"/data/REDD/449.h5\") #load FHMM prediction\n",
    "disag_elec = disag.buildings[building_number].elec\n",
    "\n",
    "f1 = f1_score(disag_elec, test_elec)\n",
    "f1.index = disag_elec.get_labels(f1.index)\n",
    "f1.plot(kind='barh')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "rms = rms_error_power(disag_elec, elec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5      0.50\n",
       "6     51.00\n",
       "8     39.75\n",
       "9     80.00\n",
       "11    50.00\n",
       "dtype: float64"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "mne = mean_normalized_error_power(disag_elec, elec)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5      0.076923\n",
       "6           inf\n",
       "8      0.654321\n",
       "9     80.000000\n",
       "11    12.500000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "mne"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 2",
   "language": "python",
   "name": "python2"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 2
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython2",
   "version": "2.7.10"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 0
}
